package fr.demos.cinepantin.controleur;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import fr.demos.cinepantin.Admin;
import fr.demos.cinepantin.Client;
import fr.demos.cinepantin.dao.DaoAdmin;
import fr.demos.cinepantin.dao.DaoClient;
import fr.demos.cinepantin.dao.interfac.AdminDao;
import fr.demos.cinepantin.dao.interfac.ClientDao;
import fr.demos.cinepantin.exception.DaoExceptions;
import fr.demos.cinepantin.Panier;

/**
 * @author CQP-DNT
 * Servlet implementation class Login Admin et Client
 * 
 *  Permets a un Client et un Admin de se connecter 
 */
@WebServlet("/Login")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Inject
	@DaoAdmin
	private AdminDao admindao;
	
	@Inject
	@DaoClient
	private ClientDao clientdao;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// get session
		HttpSession session = request.getSession();
		RequestDispatcher rd = null;
		Admin admin = (Admin) session.getAttribute("adminSession");
		if (admin != null) {
			// un admin est déjà en session
			rd = request.getRequestDispatcher("/AfficherArticle");
		} else {
			// on envoie vers la page de login
			rd = request.getRequestDispatcher("/login.jsp");
		}

		rd.forward(request, response);

		Client client = (Client) session.getAttribute("clientSession");
		if (client != null) {
			
			// le client est déjà enregistré dans la session
			rd = request.getRequestDispatcher("/AfficherArticle");
		
		} else {
			// on envoie vers la page de login
			rd = request.getRequestDispatcher("/login.jsp");
		}

		rd.forward(request, response);
	}	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		RequestDispatcher rd = null;
		HttpSession session = request.getSession();

		// creer une liste pour les erreurs
		List<String> erreurs = new ArrayList<>();

		String email = request.getParameter("email").trim();
		String password = request.getParameter("password").trim();
		
	
		try {
			// verification si un admin existe
			
			if (admindao.verifLoginAdmin(email, password)) {
        // recupere l'Admin par son email
				session.setAttribute("adminSession", admindao.getAdminByEmail(email));
				rd = request.getRequestDispatcher("/AfficherArticle");
			} else if (clientdao.verifLoginClient(email, password)) {
                 // verification si un client existe
				session.setAttribute("clientSession", clientdao.getClientByEmail(email));
//				rd = request.getRequestDispatcher("/AfficherArticle");

				// Recupere le panier de la session
				Panier panier = (Panier)session.getAttribute("panierSession");
				// si panier est vide
				if(panier.getContenu().isEmpty()){
				
				rd = request.getRequestDispatcher("/AfficherArticle");
				} else {
   			rd = request.getRequestDispatcher("/AfficherPanier");
				}
			} else {

				// Affichage erreur dans le cas de login ou mot de passe incorrect
				erreurs.add("Login ou mot de passe incorrect");
				rd = request.getRequestDispatcher("/login.jsp");
			}
		} catch (DaoExceptions e) {
			e.printStackTrace();
			// Affichange erreur si impossible de se connecter à la base de donnée
			erreurs.add("Impossible de pouvoir se connecter à la base de données");
			rd = request.getRequestDispatcher("/login.jsp");
		}

		request.setAttribute("erreurs", erreurs);
		rd.forward(request, response);

	}
	}


